{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **Moon lander (2D) Example**\n",
    "(c) 2023 Devakumar Thammisetty\n",
    "\n",
    "MPOPT is an open-source Multi-phase Optimal Control Problem (OCP) solver based on pseudo-spectral collocation with customized adaptive grid refinement techniques.\n",
    "\n",
    "Download this notebook: [moon_lander.ipynb](https://github.com/mpopt/mpopt/blob/docs/docs/source/notebooks/moon_lander.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Install mpopt from pypi using the following. Disable after first usage"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Import mpopt (Contains main solver modules)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#!pip install mpopt\n",
    "from mpopt import mp"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Defining OCP\n",
    "\n",
    "\n",
    "The Fuel optimal solution to the moon-lander OCP is known to have bang-bang thrust profile. The selected OCP has one discontinuity.\n",
    "\n",
    "\n",
    "\n",
    "   \\begin{aligned}\n",
    "   &\\min_{x, u}        & \\qquad & J = 0 + \\int_{t_0}^{t_f}u\\ dt\\\\\n",
    "   &\\text{subject to} &      & \\dot{x_0} = x_1; \\dot{x_1} = u - 1.5\\\\\n",
    "    &                 &     & x_0(t_f) = 0; \\ x_1(t_f) = 0\\\\\n",
    "   &                  &      & x_0(t_0) = 10; \\ x_1(t_0) = -2\\\\\n",
    "   &                  &       & x_0 \\geq 0; 0 \\leq u \\leq 3\\\\\n",
    "&                 &     & t_0 = 0.0; t_f = \\text{free variable}\n",
    "  \\end{aligned}\n",
    "\n",
    "\n",
    "\n",
    "We first create an OCP object and then polulate the object with dynamics, path_constraints, terminal_constraints and objective (running_costs, terminal_costs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "ocp = mp.OCP(n_states=2, n_controls=1, n_phases=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "ocp.dynamics[0] = lambda x, u, t: [x[1], u[0] - 1.5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "ocp.running_costs[0] = lambda x, u, t: u[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "ocp.terminal_constraints[0] = lambda xf, tf, x0, t0: [xf[0], xf[1]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Initial state"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "ocp.x00[0] = [10.0, -2.0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Box constraints"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "ocp.lbx[0][0] = 0.0\n",
    "ocp.lbu[0], ocp.ubu[0] = 0, 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "ocp.validate()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Solve and plot the results in one line\n",
    "\n",
    "Lets solve the OCP using following pseudo-spectral approximation\n",
    "* Collocation using Legendre-Gauss-Radau roots\n",
    "* Let's plot the position and velocity evolution with time starting from 0.\n",
    "\n",
    "The OCP is a free final time formulation, "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "******************************************************************************\n",
      "This program contains Ipopt, a library for large-scale nonlinear optimization.\n",
      " Ipopt is released as open source code under the Eclipse Public License (EPL).\n",
      "         For more information visit http://projects.coin-or.org/Ipopt\n",
      "******************************************************************************\n",
      "\n",
      "Total number of variables............................:      182\n",
      "                     variables with only lower bounds:       61\n",
      "                variables with lower and upper bounds:       61\n",
      "                     variables with only upper bounds:        0\n",
      "Total number of equality constraints.................:      124\n",
      "Total number of inequality constraints...............:       60\n",
      "        inequality constraints with only lower bounds:        0\n",
      "   inequality constraints with lower and upper bounds:       60\n",
      "        inequality constraints with only upper bounds:        0\n",
      "\n",
      "\n",
      "Number of Iterations....: 32\n",
      "\n",
      "                                   (scaled)                 (unscaled)\n",
      "Objective...............:   8.2477255075783038e+00    8.2477255075783038e+00\n",
      "Dual infeasibility......:   1.9684090468707893e-10    1.9684090468707893e-10\n",
      "Constraint violation....:   4.0178316229599886e-10    4.0178316229599886e-10\n",
      "Complementarity.........:   4.4108642187588750e-09    4.4108642187588750e-09\n",
      "Overall NLP error.......:   4.4108642187588750e-09    4.4108642187588750e-09\n",
      "\n",
      "\n",
      "Number of objective function evaluations             = 33\n",
      "Number of objective gradient evaluations             = 33\n",
      "Number of equality constraint evaluations            = 33\n",
      "Number of inequality constraint evaluations          = 33\n",
      "Number of equality constraint Jacobian evaluations   = 33\n",
      "Number of inequality constraint Jacobian evaluations = 33\n",
      "Number of Lagrangian Hessian evaluations             = 32\n",
      "Total CPU secs in IPOPT (w/o function evaluations)   =      0.046\n",
      "Total CPU secs in NLP function evaluations           =      0.004\n",
      "\n",
      "EXIT: Optimal Solution Found.\n",
      "      solver  :   t_proc      (avg)   t_wall      (avg)    n_eval\n",
      "       nlp_f  | 145.00us (  4.39us) 144.99us (  4.39us)        33\n",
      "       nlp_g  | 781.00us ( 23.67us) 774.17us ( 23.46us)        33\n",
      "    nlp_grad  |  47.00us ( 47.00us)  44.91us ( 44.91us)         1\n",
      "  nlp_grad_f  | 213.00us (  6.26us) 212.28us (  6.24us)        34\n",
      "  nlp_hess_l  | 274.00us (  8.56us) 269.97us (  8.44us)        32\n",
      "   nlp_jac_g  |   1.03ms ( 30.24us)   1.04ms ( 30.44us)        34\n",
      "       total  |  52.43ms ( 52.43ms)  51.88ms ( 51.88ms)         1\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mpo, post = mp.solve(ocp, n_segments=10, poly_orders=6, scheme=\"LGR\", plot=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Lets retrive the solution to see the terminal time. \n",
    "\n",
    "x: states, u: Controls, t:time, a:Algebraic variables in case OCP has differential algebraic equations (DAEs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Last element of t and x gives the terminal values. Exact terminal time from the analytical solution is 4.1641s."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Terminal time, state : 4.1652 vs 4.1641s (Exact), [9.85970078e-37 0.00000000e+00]\n"
     ]
    }
   ],
   "source": [
    "x, u, t, a = post.get_data()\n",
    "print(f\"Terminal time, state : {t[-1][0]:.4f} vs 4.1641s (Exact), {x[-1]}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Solve again with Chebyshev-Gauss-Lobatto (CGL) roots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total number of variables............................:      182\n",
      "                     variables with only lower bounds:       61\n",
      "                variables with lower and upper bounds:       61\n",
      "                     variables with only upper bounds:        0\n",
      "Total number of equality constraints.................:      124\n",
      "Total number of inequality constraints...............:       60\n",
      "        inequality constraints with only lower bounds:        0\n",
      "   inequality constraints with lower and upper bounds:       60\n",
      "        inequality constraints with only upper bounds:        0\n",
      "\n",
      "\n",
      "Number of Iterations....: 41\n",
      "\n",
      "                                   (scaled)                 (unscaled)\n",
      "Objective...............:   8.2457172048588543e+00    8.2457172048588543e+00\n",
      "Dual infeasibility......:   1.3972013274602247e-12    1.3972013274602247e-12\n",
      "Constraint violation....:   3.4862335240859466e-11    3.4862335240859466e-11\n",
      "Complementarity.........:   3.9978925923296842e-09    3.9978925923296842e-09\n",
      "Overall NLP error.......:   3.9978925923296842e-09    3.9978925923296842e-09\n",
      "\n",
      "\n",
      "Number of objective function evaluations             = 42\n",
      "Number of objective gradient evaluations             = 42\n",
      "Number of equality constraint evaluations            = 42\n",
      "Number of inequality constraint evaluations          = 42\n",
      "Number of equality constraint Jacobian evaluations   = 42\n",
      "Number of inequality constraint Jacobian evaluations = 42\n",
      "Number of Lagrangian Hessian evaluations             = 41\n",
      "Total CPU secs in IPOPT (w/o function evaluations)   =      0.150\n",
      "Total CPU secs in NLP function evaluations           =      0.009\n",
      "\n",
      "EXIT: Optimal Solution Found.\n",
      "      solver  :   t_proc      (avg)   t_wall      (avg)    n_eval\n",
      "       nlp_f  | 188.00us (  4.48us) 183.99us (  4.38us)        42\n",
      "       nlp_g  |   2.48ms ( 58.98us)   2.49ms ( 59.19us)        42\n",
      "    nlp_grad  | 114.00us (114.00us) 113.29us (113.29us)         1\n",
      "  nlp_grad_f  | 273.00us (  6.35us) 266.81us (  6.20us)        43\n",
      "  nlp_hess_l  | 336.00us (  8.20us) 332.45us (  8.11us)        41\n",
      "   nlp_jac_g  |   3.81ms ( 88.63us)   3.80ms ( 88.47us)        43\n",
      "       total  | 167.97ms (167.97ms) 167.12ms (167.12ms)         1\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mpo, post = mp.solve(ocp, n_segments=2, poly_orders=30, scheme=\"CGL\", plot=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Terminal time, state : 4.1661 vs 4.1641s (Exact), [0. 0.]\n"
     ]
    }
   ],
   "source": [
    "x, u, t, a = post.get_data()\n",
    "print(f\"Terminal time, state : {t[-1][0]:.4f} vs 4.1641s (Exact), {x[-1]}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Solve again with Legendre-Gauss-Lobatto (LGL) roots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total number of variables............................:      182\n",
      "                     variables with only lower bounds:       61\n",
      "                variables with lower and upper bounds:       61\n",
      "                     variables with only upper bounds:        0\n",
      "Total number of equality constraints.................:      124\n",
      "Total number of inequality constraints...............:       60\n",
      "        inequality constraints with only lower bounds:        0\n",
      "   inequality constraints with lower and upper bounds:       60\n",
      "        inequality constraints with only upper bounds:        0\n",
      "\n",
      "\n",
      "Number of Iterations....: 42\n",
      "\n",
      "                                   (scaled)                 (unscaled)\n",
      "Objective...............:   8.2425586640613506e+00    8.2425586640613506e+00\n",
      "Dual infeasibility......:   6.8055248936271795e-11    6.8055248936271795e-11\n",
      "Constraint violation....:   6.9194650009762881e-12    8.8133944586843427e-12\n",
      "Complementarity.........:   4.7886457777884481e-09    4.7886457777884481e-09\n",
      "Overall NLP error.......:   4.7886457777884481e-09    4.7886457777884481e-09\n",
      "\n",
      "\n",
      "Number of objective function evaluations             = 43\n",
      "Number of objective gradient evaluations             = 43\n",
      "Number of equality constraint evaluations            = 43\n",
      "Number of inequality constraint evaluations          = 43\n",
      "Number of equality constraint Jacobian evaluations   = 43\n",
      "Number of inequality constraint Jacobian evaluations = 43\n",
      "Number of Lagrangian Hessian evaluations             = 42\n",
      "Total CPU secs in IPOPT (w/o function evaluations)   =      0.139\n",
      "Total CPU secs in NLP function evaluations           =      0.010\n",
      "\n",
      "EXIT: Optimal Solution Found.\n",
      "      solver  :   t_proc      (avg)   t_wall      (avg)    n_eval\n",
      "       nlp_f  | 184.00us (  4.28us) 181.26us (  4.22us)        43\n",
      "       nlp_g  |   2.61ms ( 60.79us)   2.62ms ( 60.86us)        43\n",
      "    nlp_grad  | 113.00us (113.00us) 112.84us (112.84us)         1\n",
      "  nlp_grad_f  | 283.00us (  6.43us) 276.32us (  6.28us)        44\n",
      "  nlp_hess_l  | 350.00us (  8.33us) 342.76us (  8.16us)        42\n",
      "   nlp_jac_g  |   3.91ms ( 88.80us)   3.93ms ( 89.37us)        44\n",
      "       total  | 149.56ms (149.56ms) 149.21ms (149.21ms)         1\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mpo, post = mp.solve(ocp, n_segments=2, poly_orders=30, scheme=\"LGL\", plot=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Terminal time, state : 4.1662 vs 4.1641s (Exact), [3.68621737e-35 0.00000000e+00]\n"
     ]
    }
   ],
   "source": [
    "x, u, t, a = post.get_data()\n",
    "print(f\"Terminal time, state : {t[-1][0]:.4f} vs 4.1641s (Exact), {x[-1]}\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
